package JAVA300.第八章常用类;
/*
测试StringBuffer StringBuilder可变字符序列
 */

public class TestStringBuilder {
    public static void main(String[] args) {
//------------------------------------------sb可变特点
        //sb改变字符后 地址未变
//        StringBuilder sb = new StringBuilder("abced");
//        System.out.println(Integer.toHexString(sb.hashCode()));//将字符串的hash码转换为16进制
//
//        sb.setCharAt(2,'2');
//        System.out.println(Integer.toHexString(sb.hashCode()));//将字符串的hash码转换为16进制
//        System.out.println(sb);
//        System.out.println("########################");
//         //sb改变字符后 地址未变
//        String str ="abc";
//        System.out.println(Integer.toHexString(str.hashCode()));//17862
//        str = str +"abc";
//        System.out.println(Integer.toHexString(str.hashCode()));//ab198cc0
//        System.out.println(str);
//--------------------------------------------sb的一些方法
//        StringBuilder stringBuilder = new StringBuilder();
//        for (int i=0;i<26;i++){
//            stringBuilder.append((char)('a'+i));//新增
//        }
//        System.out.println((stringBuilder));
//
//        stringBuilder.reverse();//倒序
//        System.out.println(stringBuilder);
//
//        stringBuilder.insert(2,'1').insert(4,'2');//插入--return this 可链式调用
//        System.out.println(stringBuilder);
//----------------------------------------------可变与不可变字符序列使用陷阱
       //循环累加添加字符
        String str1 = "";
        long num1 = Runtime.getRuntime().freeMemory();//系统剩余内存时间
        long time1 = System.currentTimeMillis();//系统当前时间
        for(int i=0;i<500;i++){
            str1 =str1+i;//字符串连接 i会成为一个对象 连接后又成一个对象 所所以共生成500*2个对象，不可以出现这种！！！！！
        }
        long num2 = Runtime.getRuntime().freeMemory();//系统剩余内存时间
        long time2 = System.currentTimeMillis();//系统当前时间
        System.out.println("String 占用内存："+(num1-num2));
        System.out.println("String 占用时间："+(time2-time1));


        StringBuilder stringBuilder1 = new StringBuilder();
        long num3 = Runtime.getRuntime().freeMemory();//系统剩余内存时间
        long time3 = System.currentTimeMillis();//系统当前时间
        for(int i= 0;i<500;i++){
            stringBuilder1.append(i);
        }
        long num4 = Runtime.getRuntime().freeMemory();//系统剩余内存时间
        long time4 = System.currentTimeMillis();//系统当前时间
        System.out.println("StringBuilder 占用内存："+(num3-num4));
        System.out.println("StringBuilder 占用时间："+(time4-time3));





    }

}
